//
//  FilterViewController.m
//  CoreAnimation
//
//  Created by 张国文 on 16/10/24.
//  Copyright © 2016年 hangzhouyijiyin. All rights reserved.
//

#import "FilterViewController.h"

@interface FilterViewController ()

@property (nonatomic, strong) UIImageView *showImageV; // 主要进行图片的展示

@end

@implementation FilterViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    self.view.backgroundColor = [UIColor whiteColor];
    
    // 这一节我们主要讲解滤镜，顾名思义滤镜的主要作用就是对图片及进行加工，得到我们需要的效果，通常在图片的制作方面使用，这一节我主要讲解滤镜的使用，我们以图片的马赛克滤镜为例。滤镜有几十种组合在这里我就不一一列举了。http://blog.sina.com.cn/s/blog_5fb39f9101018g34.html (这个链接上面有所有的滤镜的类型和对应滤镜可以更改的value值)
    
    self.showImageV = [[UIImageView alloc] initWithFrame:CGRectMake(50, 100, 250, 150)];
    self.showImageV.backgroundColor = [[UIColor redColor] colorWithAlphaComponent:0.1];
    [self.view addSubview:_showImageV];
    
    // 为了和OpenGLES技术渲染图片的性能进行比较，我们同样增加slider
    UISlider *slider = [[UISlider alloc] initWithFrame:CGRectMake(0, 400, [UIScreen mainScreen].bounds.size.width, 30)];
    slider.minimumValue = 1.0f;
    slider.maximumValue = 15.0f; // 这样设置是因为CIPixellate的key对应的值取值范围在在1~100，对大值不确定，但是不要太大，默认值为8
    [slider setValue:5];
    [slider addTarget:self action:@selector(changeFilterValue:) forControlEvents:UIControlEventValueChanged];
    [self.view addSubview:slider];
    
    // ok经过测试，不用我说你也看到了，当我们改变slider值的时候会发现cpu的使用率急剧增大，使用率会大于100%，这不是我们想要看到的，因此OpenGLES的优势已经体现出来了。
}

- (void)changeFilterValue:(UISlider *)slider
{
    CIImage *ciImage = [[CIImage alloc] initWithImage:[UIImage imageWithName:@"filter.jpg"]];
    // 1、创建滤镜
    CIFilter *fliter = [CIFilter filterWithName:@"CIPixellate"];
    [fliter setDefaults];
    [fliter setValue:ciImage forKey:kCIInputImageKey];
    [fliter setValue:@(slider.value) forKey:kCIInputScaleKey];
    
    // 2、取出滤镜加工过后的图片
    CIImage *outputImage = [fliter outputImage];
    // 3、创建coreImage上下文，运用cpu，默认就是运用cpu
    CIContext *ciContext = [CIContext contextWithOptions:nil];
    // 4、运用coreImage上下文创造 CGImageRef
    CGImageRef imageRef = [ciContext createCGImage:outputImage fromRect:[outputImage extent]];
    UIImage *showImage = [[UIImage alloc] initWithCGImage:imageRef];
    self.showImageV.image = showImage;
}



@end
